#pragma once

#include "LBCPluginMgrDefine.h"

struct I_LBCPluginFactory
{
	virtual ~I_LBCPluginFactory() = 0;

	virtual void Destroy() = 0;
	virtual int QueryInterface(REFIID riid, void** pp) = 0;
};

struct I_LBCPluginMgr
{
	virtual ~I_LBCPluginMgr() = 0;

	virtual void Destroy() = 0;

	virtual int QueryInterface(REFIID riid, void** pp) = 0;
	virtual int QueryInterface(DWORD dwClassID, void** pp) = 0;

	virtual int QueryClass(REFIID riid, PDWORD pdwClassID) = 0;
	virtual int QueryRiids(DWORD dwClassID, IID* pArr, PDWORD pdwCount) = 0;

	virtual int RegisterFactory(DWORD dwClassID, REFIID riid, I_LBCPluginFactory* pFactory) = 0;
};

extern BOOL CreatePluginManager(I_LBCPluginMgr** pp);